From b8c08b2ff763d83facc49c73fe79cef0ab5e4e99 Mon Sep 17 00:00:00 2001 From: Alexia Death Date: Fri, 27 Jul 2012 21:49:35 +0300 Subject: [PATCH] extensions: add fastpath for R'G'B'A u8 to cairo-ARGB32 conversion --- extensions/cairo.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/extensions/cairo.c b/extensions/cairo.c index abc87fd..2e224d0 100644 --- a/extensions/cairo.c +++ b/extensions/cairo.c @@ -55,6 +55,22 @@ conv_rgb8_cairo24_le (unsigned char *src, unsigned char *dst, long samples) static inline long conv_rgbA8_cairo32_le (unsigned char *src, unsigned char *dst, long samples) +{ + long n = samples; + while (n--) + { + dst[0] = src[2] * src[3]; + dst[1] = src[1] * src[3]; + dst[2] = src[0] * src[3]; + dst[3] = src[3]; + src+=4; + dst+=4; + } + return samples; +} + +static inline long +conv_rgbA8_premul_cairo32_le (unsigned char *src, unsigned char *dst, long samples) { long n = samples; while (n--) @@ -101,7 +117,10 @@ init (void) ); babl_conversion_new (babl_format ("R'aG'aB'aA u8"), f32, "linear", + conv_rgbA8_premul_cairo32_le, NULL); + babl_conversion_new (babl_format ("R'G'B'A u8"), f32, "linear", conv_rgbA8_cairo32_le, NULL); + babl_conversion_new (babl_format ("R'G'B'A u8"), f24, "linear", conv_rgba8_cairo24_le, NULL); babl_conversion_new (babl_format ("R'G'B' u8"), f24, "linear", -- 2.30.2